package com.snopzyz.hello.databus.domain.properties;

import com.snopzyz.hello.databus.annotation.DynamicClassValue;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.NestedConfigurationProperty;

import java.util.List;

@Data
@ConfigurationProperties(prefix = "binlog")
public class BinlogProperties {

    /**
     * MySQL Server 连接的配置列表
     */
    private List<ConnectionConfig> configs;


    @Data
    public static class ConnectionConfig {

        /**
         * MySQL 主机地址
         */
        private String host;

        /**
         * MySQL 端口
         */
        private int port;

        /**
         * MySQL 用户名
         */
        private String username;

        /**
         * MySQL 密码
         */
        private String password;

        /**
         * Binlog 处理器列表
         */
        @NestedConfigurationProperty
        private List<BinlogHandler> handlers;

        /**
         * 是否存在可以处理 database 的处理器
         * @param database 库名
         * @return true-存在、false-不存在
         */
        public boolean canHandle (String database) {
            return handlers.stream()
                    .anyMatch(handler -> handler.database.equals(database));
        }
    }

    @Data
    public static class BinlogHandler {

        /**
         * 数据库名
         */
        private String database;

        /**
         * 处理器类名
         */
        @DynamicClassValue
        private Class<?> clazz;

        /**
         * 处理器方法名
         */
        private String method;
    }

}
